package br.com.jmed.control;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

import br.com.jmed.model.Hospital;
import br.com.jmed.model.Materiai;
import br.com.jmed.model.Medicamento;
import br.com.jmed.model.Medico;
import br.com.jmed.model.Ocorrencia;
import br.com.jmed.model.OutrosProfissionai;
import br.com.jmed.model.Paciente;
import br.com.jmed.model.PacienteConvenio;
import br.com.jmed.model.Procedimento;
import br.com.jmed.model.Prontuario;
import br.com.jmed.model.ProntuarioProcedimento;
import br.com.jmed.model.ProntuarioProcedimentosMateriai;
import br.com.jmed.model.ProntuarioProcedimentosMedicamento;
import br.com.jmed.model.ProntuarioProcedimentosMedico;
import br.com.jmed.model.ProntuarioProcedimentosOutrosProfissionai;
import br.com.jmed.model.ProntuarioTipoAcomodacao;
import br.com.jmed.model.TipoAcomodacao;
import br.com.jmed.model.TipoAtendimento;
import br.com.jmed.model.TipoProcedimento;
import br.com.jmed.service.CadastrosService;
import br.com.jmed.service.ProntuarioService;
import br.com.jmed.util.Utils;

@ManagedBean(name = "prontuarioBean")
@SessionScoped
public class ProntuarioControl extends BaseControl implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@EJB
	private CadastrosService cadastroService;
	
	@EJB
	private ProntuarioService prontuarioService;

	@Inject
	private Hospital hospital;

	@Inject
	private Paciente paciente;

	@Inject
	private Prontuario prontuario;
	
	@Inject 
	private Medico medicoSolicitante;
	
	@Inject 
	private Medico medicoParticipante;

	@Inject
	private PacienteConvenio pacienteConvenio;
	
	@Inject
	private TipoAtendimento tipoAtendimento;
	
	@Inject
	private TipoProcedimento tipoProcedimento;
	
	@Inject
	private TipoAcomodacao tipoAcomodacao;
	
	@Inject
	private Procedimento procedimento;
	
	@Inject
	private ProntuarioProcedimento prontuarioProcedimento;
	
	@Inject
	private ProntuarioTipoAcomodacao prontuarioTipoAcomodacao;
	
	@Inject
	private ProntuarioProcedimentosMedico prontuarioProcedimentosMedicos;
	
	@Inject
	private OutrosProfissionai outrosProfissionais;
	
	@Inject
	private ProntuarioProcedimentosOutrosProfissionai prontuarioProcedimentosOutrosProfissionais;
	
	@Inject
	private Medicamento medicamento;
	
	@Inject
	private Materiai materiais;
	
	@Inject
	private ProntuarioProcedimentosMedicamento prontuarioProcedimentosMedicamento;
	
	@Inject
	private ProntuarioProcedimentosMateriai prontuarioProcedimentosMateriais;
	
	@Inject
	private Ocorrencia ocorrencia;
	
	private Integer idConvenio;
	private Integer idTipoAcomodacao;
	private Integer idTipoAtendimento;
	private Integer idTipoProcedimento;
	private Integer idProntuarioProcedimento;
	private Integer idOcorrencia;
	
	private boolean closePanel;
	private boolean enableTables = true;
	private boolean visualizacao = false;
	
	private String idMaterial;
	private String idHospital;
	private String idPaciente;
	private String idSolicitante;
	private String idProcedimento;
	private String idParticipante;
	private String idOutrosProfissionais;
	private String idMedicamento;

	private Integer codigoConvenioPesquisa;
	private String nomePacientePesquisa;
	private Date dataInicioPesquisa;
	private Date dataFimPesquisa;
	private List<Prontuario> prontuarioPesquisa;

	private List<Hospital> listHospital;
	private List<Paciente> listPaciente;
	private List<PacienteConvenio> listPacienteConvenio;
	private List<Medico> listMedicoSolicitante;
	private List<TipoAtendimento> listTipoAtendimento;
	private List<TipoProcedimento> listTipoProcedimento;
	private List<ProntuarioTipoAcomodacao> listProntuarioTipoAcomodacao;
	private List<TipoAcomodacao> listTipoAcomodacao;
	private List<Procedimento> listProcedimentos;
	private List<ProntuarioProcedimento> listProntuarioProcedimentos;
	private List<ProntuarioProcedimentosMedico> listProntuarioProcedimentosMedicos;
	private List<ProntuarioProcedimentosOutrosProfissionai> listProntuarioProcedimentosOutrosProfissionais;
	private List<OutrosProfissionai> listOutrosProfissionais;
	private List<Medicamento> listMedicamentos;
	private List<ProntuarioProcedimentosMedicamento> listProntuarioProcedimentosMedicamentos;
	private List<ProntuarioProcedimentosMateriai> listProntuarioProcedimentosMateriais;
	private List<Materiai> listMateriais;
	private List<Ocorrencia> listOcorrencias;

	public String getIdParticipante() {
		return idParticipante;
	}

	public String abrirProntuario(Integer codigo,boolean readOnly){
		prontuario = prontuarioService.findProntuarioByCode(codigo);
		listProntuarioProcedimentos = prontuarioService.findProntuarioProcedimento(codigo);
		listProntuarioProcedimentosMateriais = prontuarioService.findProntuarioProcedimentosMateriais(codigo);
		listProntuarioProcedimentosMedicamentos = prontuarioService.findProntuarioProcedimentosMedicamentos(codigo);
		listProntuarioProcedimentosOutrosProfissionais = prontuarioService.findProntuarioProcedimentosOutrosProfissionais(codigo);
		listProntuarioTipoAcomodacao = prontuarioService.findProntuarioTipoAcomodacao(codigo);
		listOcorrencias = prontuarioService.findProntuarioOcorrencias(codigo);
		
		medicoSolicitante = prontuario.getMedicoSolicitante();
		hospital = prontuario.getHospital();
		paciente = prontuario.getPacienteConvenio().getPaciente();
		pacienteConvenio = prontuario.getPacienteConvenio();
		
		paciente.setPacienteConvenios(cadastroService.findPacienteConvenioByPaciente(paciente.getCodigo()));
		idTipoAtendimento = prontuario.getTipoAtendimentoBean() != null ? prontuario.getTipoAtendimentoBean().getCodigo() : 0;
		idTipoProcedimento = prontuario.getTipoProcedimentoBean() != null ? prontuario.getTipoProcedimentoBean().getCodigo(): 0;
		idConvenio = pacienteConvenio.getConvenio().getCodigo();
		idPaciente = paciente.getCodigo()+" - "+paciente.getNome();
		idHospital = hospital.getCodigo()+" - "+hospital.getNomeFantasia();
		idSolicitante = medicoSolicitante.getCodigo()+" - "+medicoSolicitante.getNome();
		enableTables = false;
		if(readOnly) { visualizacao = true ;} else { visualizacao = false;} ;
		return "/pages/prontuario/prontuarioPrincipal.xhtml";
	}
	
	public void setIdParticipante(String idParticipante) {
		this.idParticipante = idParticipante;
		medicoParticipante = cadastroService.findMedicoByCode(Integer.parseInt(idParticipante.split(" - ")[0]));
	}
	
	public Integer getIdTipoAcomodacao() {
		return idTipoAcomodacao;
	}

	public void setIdTipoAcomodacao(Integer idTipoAcomodacao) {
		this.idTipoAcomodacao = idTipoAcomodacao;
		tipoAcomodacao = cadastroService.findTipoAcomodacaoByCode(idTipoAcomodacao);
	}

	public List<TipoAcomodacao> getListTipoAcomodacao() {
		listTipoAcomodacao = cadastroService.findTipoAcomodacaoAll();
		return listTipoAcomodacao;
	}

	public void setListTipoAcomodacao(List<TipoAcomodacao> listTipoAcomodacao) {
		this.listTipoAcomodacao = listTipoAcomodacao;
	}

	public List<Hospital> autoCompleteHospital(Object prefix) {
		String pref = (String) prefix;
		listHospital = cadastroService.findHospitalByName(pref);
		return listHospital;
	}
	
	public Medico getMedicoSolicitante() {
		return medicoSolicitante;
	}

	public void setMedicoSolicitante(Medico medicoSolicitante) {
		this.medicoSolicitante = medicoSolicitante;
	}
	
	public List<Paciente> autoCompletePaciente(Object prefix) {
		String pref = (String) prefix;
		listPaciente = cadastroService.findPacienteByName(pref);
		return listPaciente;
	}

	public List<Medico> autoCompleteMedico(Object prefix) {
		String pref = (String) prefix;
		listMedicoSolicitante = cadastroService.findMedicoByNome(pref);
		return listMedicoSolicitante;
	}
	
	public List<OutrosProfissionai> autoCompleteOutrosProfissionais(Object prefix) {
		String pref = (String) prefix;
		listOutrosProfissionais = cadastroService.findOutrosProfissionaisByNome(pref);
		return listOutrosProfissionais;
	}
	
	public List<Medicamento> autoCompleteMedicamentos(Object prefix) {
		String pref = (String) prefix;
		listMedicamentos = cadastroService.findMedicamentosByNome(pref);
		return listMedicamentos;
	}
	
	public List<Materiai> autoCompleteMateriais(Object prefix) {
		String pref = (String) prefix;
		listMateriais = cadastroService.findMateriaisByNome(pref);
		return listMateriais;
	}
	
	public List<Procedimento> autoCompleteProcedimento(Object prefix) {
		String pref = (String) prefix;
		listProcedimentos = cadastroService.findProcedimentoByName(pref);
		return listProcedimentos;
	}
	
	public List<Hospital> getListHospital() {
		return listHospital;
	}

	public void setListHospital(List<Hospital> listHospital) {
		this.listHospital = listHospital;
	}

	public List<Paciente> getListPaciente() {
		return listPaciente;
	}

	public void setListPaciente(List<Paciente> listPaciente) {
		this.listPaciente = listPaciente;
	}

	public String getIdHospital() {
		return idHospital;
	}

	public void setIdHospital(String idHospital) {
		this.idHospital = idHospital;
		hospital = cadastroService.findHospitalByCode(Integer
				.parseInt(idHospital.split(" - ")[0]));
	}

	public String getIdPaciente() {
		return idPaciente;
	}

	public void setIdPaciente(String idPaciente) {
		this.idPaciente = idPaciente;
		paciente = cadastroService.findPacienteByCode(Integer
				.parseInt(idPaciente.split(" - ")[0]));
	}

	public List<PacienteConvenio> getListPacienteConvenio() {
		listPacienteConvenio = cadastroService.findPacienteConvenioByPaciente(paciente.getCodigo());
		return listPacienteConvenio;
	}
		
	public String novoProntuario(){
		limparFormulario();
		prontuario.setUsuarioInclusao(getUsuario());
		prontuario.setDataInclusao(new Date());
		prontuario = prontuarioService.inserirProntuario(prontuario);
		return "/pages/prontuario/prontuarioPrincipal.xhtml";
	}

	private void limparFormulario(){
		prontuario = new Prontuario();
		listProntuarioProcedimentos = new ArrayList<ProntuarioProcedimento>();
		listProntuarioProcedimentosMateriais = new ArrayList<ProntuarioProcedimentosMateriai>();
		listProntuarioProcedimentosMedicamentos = new ArrayList<ProntuarioProcedimentosMedicamento>();
		listProntuarioProcedimentosOutrosProfissionais = new ArrayList<ProntuarioProcedimentosOutrosProfissionai>();
		listProntuarioTipoAcomodacao = new ArrayList<ProntuarioTipoAcomodacao>();
		listOcorrencias = new ArrayList<Ocorrencia>();
		
		medicoSolicitante = new Medico();
		hospital = new Hospital();
		paciente = new Paciente();
		pacienteConvenio = new PacienteConvenio();
		
		idTipoAtendimento = 0;
		idOcorrencia = 0;
		idTipoProcedimento = 0;
		idConvenio = 0;
		idPaciente = "";
		idHospital = "";
		idSolicitante = "";		
	}
	
	public void emitirFichaLongaPermanencia(Prontuario prontuario){
		
		if(prontuario.getDataEntrada() != null && Utils.diferencaDias(prontuario.getDataEntrada(), new Date())  >=15){
			try {
				Map<String, Object> parametros = new HashMap<String, Object>();
				parametros.put("prontuario_codigo", prontuario.getCodigo());
				gerarRelatorio("ficha_longa_permanencia", parametros);
			} catch (Exception e) {
				createFormMessage("msgForm", e.getMessage());
			}
		}else {
			createFormMessage("msgForm", "Não é possível emitir a ficha de longa permanencia.");
		}
	}
	
	public void setListPacienteConvenio(
			List<PacienteConvenio> listPacienteConvenio) {
		this.listPacienteConvenio = listPacienteConvenio;
	}

	public Hospital getHospital() {
		return hospital;
	}

	public void setHospital(Hospital hospital) {
		this.hospital = hospital;
	}

	public Paciente getPaciente() {
		return paciente;
	}

	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}

	public void setCadastroService(CadastrosService cadastroService) {
		this.cadastroService = cadastroService;
	}

	public Prontuario getProntuario() {
		return prontuario;
	}

	public void setProntuario(Prontuario prontuario) {
		this.prontuario = prontuario;
	}

	public PacienteConvenio getPacienteConvenio() {
		return pacienteConvenio;
	}

	public void setPacienteConvenio(PacienteConvenio pacienteConvenio) {
		this.pacienteConvenio = pacienteConvenio;
	}

	public Integer getIdConvenio() {
		return idConvenio;
	}

	public void setIdConvenio(Integer idConvenio) {
		this.idConvenio = idConvenio;

		for (PacienteConvenio item : listPacienteConvenio) {
			if (item.getId().getConvenio() == idConvenio) {
				pacienteConvenio = item;
				break;
			}
		}
		
	}

	public String getIdSolicitante() {
		return idSolicitante;
	}

	public void setIdSolicitante(String idSolicitante) {
		this.idSolicitante = idSolicitante;
		medicoSolicitante = cadastroService.findMedicoByCode(Integer.parseInt(idSolicitante.split(" - ")[0]));
	}

	public List<Medico> getListMedicoSolicitante() {
		return listMedicoSolicitante;
	}

	public void setListMedicoSolicitante(List<Medico> listMedicoSolicitante) {
		this.listMedicoSolicitante = listMedicoSolicitante;
	}

	public Integer getIdTipoAtendimento() {
		return idTipoAtendimento;
	}

	public void setIdTipoAtendimento(Integer idTipoAtendimento) {
		this.idTipoAtendimento = idTipoAtendimento;
		tipoAtendimento = cadastroService.findTipoAtendimentoByCode(idTipoAtendimento);
		prontuario.setTipoAtendimentoBean(tipoAtendimento);
	}

	public List<TipoAtendimento> getListTipoAtendimento() {
		listTipoAtendimento = cadastroService.findTipoAtendimentoAll();
		return listTipoAtendimento;
	}

	public void setListTipoAtendimento(List<TipoAtendimento> listTipoAtendimento) {
		this.listTipoAtendimento = listTipoAtendimento;
	}

	public TipoAtendimento getTipoAtendimento() {
		return tipoAtendimento;
	}

	public void setTipoAtendimento(TipoAtendimento tipoAtendimento) {
		this.tipoAtendimento = tipoAtendimento;
		prontuario.setTipoAtendimentoBean(cadastroService.findTipoAtendimentoByCode(idTipoAtendimento));
	}

	public Integer getIdTipoProcedimento() {
		return idTipoProcedimento;
	}

	public void setIdTipoProcedimento(Integer idTipoProcedimento) {
		this.idTipoProcedimento = idTipoProcedimento;
		prontuario.setTipoProcedimentoBean(cadastroService.findTipoProcedimentoByCode(idTipoProcedimento));
	}

	public List<TipoProcedimento> getListTipoProcedimento() {
		listTipoProcedimento = cadastroService.findTipoProcedimentoAll();
		return listTipoProcedimento;
	}

	public void setListTipoProcedimento(List<TipoProcedimento> listTipoProcedimento) {
		this.listTipoProcedimento = listTipoProcedimento;
	}

	public TipoProcedimento getTipoProcedimento() {
		return tipoProcedimento;
	}

	public void setTipoProcedimento(TipoProcedimento tipoProcedimento) {
		this.tipoProcedimento = tipoProcedimento;
		tipoProcedimento = cadastroService.findTipoProcedimentoByCode(idTipoProcedimento);
	}

	public List<ProntuarioTipoAcomodacao> getListProntuarioTipoAcomodacao() {
		
		//listProntuarioTipoAcomodacao = prontuarioService.findProntuarioTipoAcomodacao(prontuario.getCodigo());
		return listProntuarioTipoAcomodacao;
	}

	public void setListProntuarioTipoAcomodacao(
			List<ProntuarioTipoAcomodacao> listProntuarioTipoAcomodacao) {
		this.listProntuarioTipoAcomodacao = listProntuarioTipoAcomodacao;
	}

	public void setProntuarioService(ProntuarioService prontuarioService) {
		this.prontuarioService = prontuarioService;
	}

	public TipoAcomodacao getTipoAcomodacao() {
		return tipoAcomodacao;
	}

	public void setTipoAcomodacao(TipoAcomodacao tipoAcomodacao) {
		this.tipoAcomodacao = tipoAcomodacao;
	}
		
	public void selecionaAcomodacao(ProntuarioTipoAcomodacao prontuarioTipoAcomodacao){
		this.prontuarioTipoAcomodacao = prontuarioTipoAcomodacao;
		this.idTipoAcomodacao = prontuarioTipoAcomodacao.getTipoAcomodacao().getCodigo();
		setCadastroOk(false);
	}
	
	public void selecionaOcorrencia(Ocorrencia ocorrencia){
		this.ocorrencia = ocorrencia;
		this.idOcorrencia = ocorrencia.getCodigo();
		setCadastroOk(false);
	}
	
	public void selecionaProcedimento(ProntuarioProcedimento prontuarioProcedimento){
		this.prontuarioProcedimento = prontuarioProcedimento;
		this.idProcedimento = prontuarioProcedimento.getProcedimento().getCodigo().toString()+" - "+prontuarioProcedimento.getProcedimento().getDescricao();
		setCadastroOk(false);
	}
	
	public void selecionaProcedimentosMedicos(ProntuarioProcedimentosMedico prontuarioProcedimentosMedicos){
		this.prontuarioProcedimentosMedicos = prontuarioProcedimentosMedicos;
		this.idParticipante = prontuarioProcedimentosMedicos.getMedico().getCodigo()+" - "+prontuarioProcedimentosMedicos.getMedico().getNome();
		this.idProntuarioProcedimento = prontuarioProcedimentosMedicos.getProntuarioProcedimento().getCodigo();
		setCadastroOk(false);
	}
	
	public void selecionaProcedimentosOutrosProfissionais(ProntuarioProcedimentosOutrosProfissionai prontuarioProcedimentosOutrosProfissionais){
		this.prontuarioProcedimentosOutrosProfissionais = prontuarioProcedimentosOutrosProfissionais;
		this.idOutrosProfissionais = prontuarioProcedimentosOutrosProfissionais.getOutrosProfissionais().getCodigo()+" - "+prontuarioProcedimentosOutrosProfissionais.getOutrosProfissionais().getNome();;
		this.idProntuarioProcedimento = prontuarioProcedimentosOutrosProfissionais.getProntuarioProcedimento().getCodigo();
		setCadastroOk(false);
	}
	
	public void selecionaProcedimentosMedicamentos(ProntuarioProcedimentosMedicamento prontuarioProcedimentosMedicamento){
		this.prontuarioProcedimentosMedicamento = prontuarioProcedimentosMedicamento;
		this.idMedicamento = prontuarioProcedimentosMedicamento.getMedicamento().getCodigo()+" - "+prontuarioProcedimentosMedicamento.getMedicamento().getDescricao();
		this.idProntuarioProcedimento = prontuarioProcedimentosMedicamento.getProntuarioProcedimento().getCodigo();
		setCadastroOk(false);
	}
	
	public void selecionaProcedimentosMateriais(ProntuarioProcedimentosMateriai prontuarioProcedimentosMateriais){
		this.prontuarioProcedimentosMateriais = prontuarioProcedimentosMateriais;
		this.idMaterial = prontuarioProcedimentosMateriais.getMateriais().getCodigo()+" - "+prontuarioProcedimentosMateriais.getMateriais().getDescricao();
		this.idProntuarioProcedimento = prontuarioProcedimentosMateriais.getProntuarioProcedimento().getCodigo();
		setCadastroOk(false);
	}
	
	public String encerrarProntuario(){
		List<FacesMessage> listMessage = validaProntuario();
		
		for(FacesMessage message : listMessage){
			createFormMessage("msgForm",message);
		}
		
		if(listMessage.size() > 0){
			return "/pages/prontuario/prontuarioPrincipal.xhtml";
		}
		prontuario.setUsuarioAlteracao(getUsuario());
		prontuario.setDataAlteracao(new Date());
		salvarProntuario();
		prontuarioService.encerrarProntuario(prontuario);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("prontuarioBean");
		return "/index.xhtml";
	}
	
	public void removeSelecaoProcedimentosMedicos(){
		this.prontuarioProcedimentosMedicos = new ProntuarioProcedimentosMedico();
		medicoParticipante = new Medico();
		idParticipante = "";
		idProntuarioProcedimento = 0;
		setCadastroOk(false);
	}
	
	public void removeSelecaoProcedimentosOutrosProfissionais(){
		this.prontuarioProcedimentosOutrosProfissionais = new ProntuarioProcedimentosOutrosProfissionai();
		outrosProfissionais = new OutrosProfissionai();
		idOutrosProfissionais = "";
		idProntuarioProcedimento = 0;
		setCadastroOk(false);
	}
	
	public void removeSelecaoProcedimentosMedicamentos(){
		this.prontuarioProcedimentosMedicamento = new ProntuarioProcedimentosMedicamento();
		medicamento = new Medicamento();
		idMedicamento = "";
		idProntuarioProcedimento = 0;
		setCadastroOk(false);
	}
	
	public void removeSelecaoProcedimentosMateriais(){
		this.prontuarioProcedimentosMateriais = new ProntuarioProcedimentosMateriai();
		materiais = new Materiai();
		idMaterial = "";
		idProntuarioProcedimento = 0;
		setCadastroOk(false);
		
	}
	
	private List<FacesMessage> validaProntuario(){
		List<FacesMessage> listMessages = new ArrayList<FacesMessage>();
		
		if(idPaciente == null || idPaciente.equals("")){
			listMessages.add(new FacesMessage("Campo Paciente obrigatório"));
		}
		
		if(idHospital == null || idHospital.equals("")){
			listMessages.add(new FacesMessage("Campo Hospital obrigatório"));
		}
		
		if(idConvenio == null || idConvenio == 0){
			listMessages.add(new FacesMessage("Campo Convênio obrigatório"));
		}
		
		if(idSolicitante == null || idSolicitante.equals("")){
			listMessages.add(new FacesMessage("Campo Médico Solicitante obrigatório"));
		}
		
		if(idTipoAtendimento == null || idTipoAtendimento==0){
			listMessages.add(new FacesMessage("Campo Tipo Atendimento obrigatório"));
		}
		
		if(idTipoProcedimento == null || idTipoProcedimento==0){
			listMessages.add(new FacesMessage("Campo Tipo Procedimento obrigatório"));
		}
		
		return listMessages;
	}
	
	public String salvarProntuario(){
		prontuario.setPacienteConvenio(pacienteConvenio);
		prontuario.setHospital(hospital);
		prontuario.setDataAlteracao(new Date());
		prontuario.setSituacao("A");
		prontuario.setMedicoSolicitante(medicoSolicitante);
		prontuario.setUsuarioAlteracao(getUsuario());
		prontuario.setDataAlteracao(new Date());
		prontuarioService.salvarProntuario(prontuario);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("prontuarioBean");
		return "/index.xhtm";
	}
	
	public void submeteForm(){
		setCadastroOk(true);
		
	}
	
	public void pesquisarProntuario(){
		prontuarioPesquisa = prontuarioService.findProntuarioToIndex(nomePacientePesquisa, codigoConvenioPesquisa, dataInicioPesquisa, dataFimPesquisa,getUsuario());
	}
	
	public void removeSelecaoTipoAcomodacao(){
		prontuarioTipoAcomodacao = new ProntuarioTipoAcomodacao();
		this.idTipoAcomodacao = 0;
		setCadastroOk(false);
	}
	
	public void removeSelecaoOcorrencia(){
		ocorrencia = new Ocorrencia();
		this.idOcorrencia = 0;
		setCadastroOk(false);
	}
	
	public void removeSelecaoProcedimento(){
		prontuarioProcedimento = new ProntuarioProcedimento();
		this.idProcedimento = "";
		setCadastroOk(false);
	}
	
	public void removeSelecaoMedicos(){
		prontuarioProcedimento = new ProntuarioProcedimento();
		this.idParticipante = "";
		setCadastroOk(false);
	}
	
	public void removeSelecaoOutrosProfissionais(){
		prontuarioProcedimento = new ProntuarioProcedimento();
		this.idOutrosProfissionais = "";
		setCadastroOk(false);
	}
	
	public void removeSelecaoMedicamento(){
		prontuarioProcedimento = new ProntuarioProcedimento();
		this.idMedicamento = "";
		setCadastroOk(false);
	}
	
	public void removeSelecaoMateriais(){
		prontuarioProcedimento = new ProntuarioProcedimento();
		this.idMaterial = "";
		setCadastroOk(false);
	}
	
	public void removeProntuarioTipoAcomodacao(){
		prontuarioService.removeProntuarioTipoAcomodacao(prontuarioTipoAcomodacao);
		prontuarioTipoAcomodacao = new ProntuarioTipoAcomodacao();
		listProntuarioTipoAcomodacao = prontuarioService.findProntuarioTipoAcomodacao(prontuario.getCodigo());
		setCadastroOk(false);
	}
	
	public void removeProntuarioMedicos(){
		prontuarioService.removeProntuarioMedicos(prontuarioProcedimentosMedicos);
		prontuarioProcedimentosMedicos = new ProntuarioProcedimentosMedico();
		listProntuarioProcedimentosMedicos = prontuarioService.findProntuarioProcedimentosMedico(prontuario.getCodigo());
		setCadastroOk(false);
	}
	
	public void removeProntuarioOutrosParticipantes(){
		prontuarioService.removeProntuarioOutrosParticipantes(prontuarioProcedimentosOutrosProfissionais);
		prontuarioProcedimentosOutrosProfissionais = new ProntuarioProcedimentosOutrosProfissionai();
		listProntuarioProcedimentosOutrosProfissionais = prontuarioService.findProntuarioProcedimentosOutrosProfissionais(prontuario.getCodigo());
		setCadastroOk(false);
	}
	
	public void removeProntuarioMedicamentos(){
		prontuarioService.removeProntuarioMedicamentos(prontuarioProcedimentosMedicamento);
		prontuarioProcedimentosMedicamento = new ProntuarioProcedimentosMedicamento();
		listProntuarioProcedimentosMedicamentos = prontuarioService.findProntuarioProcedimentosMedicamentos(prontuario.getCodigo());
		setCadastroOk(false);
	}
	
	public void removeProntuarioMateriais(){
		prontuarioService.removeProntuarioMateriais(prontuarioProcedimentosMateriais);
		prontuarioProcedimentosMateriais = new ProntuarioProcedimentosMateriai();
		listProntuarioProcedimentosMateriais = prontuarioService.findProntuarioProcedimentosMateriais(prontuario.getCodigo());
		setCadastroOk(false);
	}

	public void removeProntuarioProcedimento(){
		if(!prontuarioService.validaExclusao(prontuarioProcedimento)){
			FacesContext.getCurrentInstance().addMessage("erro",new FacesMessage("Não é possível remover o procedimento, há vinculos em outras tabelas."));
			closePanel = false;	
			return;
		}
		prontuarioService.removeProntuarioProcedimento(prontuarioProcedimento);
		prontuarioProcedimento = new ProntuarioProcedimento();
		listProntuarioProcedimentos = prontuarioService.findProntuarioProcedimento(prontuario.getCodigo());
		closePanel = true;
		setCadastroOk(false);
	}
	
	public void removeOcorrencia(){
		prontuarioService.removeOcorrencia(ocorrencia);
		ocorrencia = new Ocorrencia();
		listOcorrencias = prontuarioService.findProntuarioOcorrencias(prontuario.getCodigo());
		closePanel = true;
		setCadastroOk(false);
	}
	
	public ProntuarioTipoAcomodacao getProntuarioTipoAcomodacao() {
		return prontuarioTipoAcomodacao;
	}

	public void setProntuarioTipoAcomodacao(
			ProntuarioTipoAcomodacao prontuarioTipoAcomodacao) {
		this.prontuarioTipoAcomodacao = prontuarioTipoAcomodacao;
	}

	
	public void incluirAlteraOcorrencia(){
		if(ocorrencia.getUsuarioInclusao() == null ) {
			ocorrencia.setUsuarioInclusao(getUsuario());
			ocorrencia.setDataInclusao(new Date());
		}else {
			ocorrencia.setUsuarioAlteracao(getUsuario());
			ocorrencia.setDataAlteracao(new Date());
		}
		ocorrencia.setProntuario(prontuario);
		prontuarioService.inserirAlterarOcorrencia(ocorrencia);
		listOcorrencias = prontuarioService.findProntuarioOcorrencias(prontuario.getCodigo());
		closePanel = true;
		setCadastroOk(true);
	}
	
	public void  incluirAlteraAcomodacao(){
		
		if(prontuarioTipoAcomodacao.getDataSaida() != null && prontuarioTipoAcomodacao.getDataEntrada().getTime() > prontuarioTipoAcomodacao.getDataSaida().getTime()){
			createFormMessage("msgPopupAcomodacao","A data inicial não pode ser maior que a data final");
			closePanel = false;
			return;
		}
		
		if(prontuarioTipoAcomodacao.getUsuarioInclusao() == null ) {
			prontuarioTipoAcomodacao.setUsuarioInclusao(getUsuario());
			prontuarioTipoAcomodacao.setDataInclusao(new Date());
		}else {
			prontuarioTipoAcomodacao.setUsuarioAlteracao(getUsuario());
			prontuarioTipoAcomodacao.setDataAlteracao(new Date());
		}
		
		prontuarioTipoAcomodacao.setProntuario(prontuario);
		prontuarioTipoAcomodacao.setSituacao("A");
		prontuarioTipoAcomodacao.setTipoAcomodacao(tipoAcomodacao);
		prontuarioService.inserirAlterarAcomodacao(prontuarioTipoAcomodacao);
		idTipoAcomodacao = 0;
		listProntuarioTipoAcomodacao = prontuarioService.findProntuarioTipoAcomodacao(prontuario.getCodigo());
		closePanel = true;
		setCadastroOk(true);
	}
	
	public void  incluirAlteraProcedimento(){
		if(prontuarioProcedimento.getDataFim() != null && prontuarioProcedimento.getDataInicio().getTime() > prontuarioProcedimento.getDataFim().getTime()){
			createFormMessage("msgPopupProcedimentos","A data inicial não pode ser maior que a data final");
			closePanel = false;
			return;
		}
		
		prontuarioProcedimento.setProntuario(prontuario);
		prontuarioProcedimento.setSituacao("A");
		prontuarioProcedimento.setProcedimento(procedimento);
		
		if(prontuarioProcedimento.getUsuarioInclusao() == null ) {
			prontuarioProcedimento.setUsuarioInclusao(getUsuario());
		}else {
			prontuarioProcedimento.setUsuarioAlteracao(getUsuario());
		}
		
		prontuarioService.inserirAlterarProcedimento(prontuarioProcedimento);
		prontuarioProcedimento = new ProntuarioProcedimento();
		idProcedimento = "";
		listProntuarioProcedimentos = prontuarioService.findProntuarioProcedimento(prontuario.getCodigo());
		setCadastroOk(true);
	}
	
	
	public void  incluirAlteraProcedimentosMedicos(){
		prontuarioProcedimentosMedicos.setMedico(medicoParticipante);
		prontuarioProcedimentosMedicos.setProntuarioProcedimento(prontuarioProcedimento);
		
		if(prontuarioProcedimentosMedicos.getUsuarioInclusao() == null ) {
			prontuarioProcedimentosMedicos.setUsuarioInclusao(getUsuario());
			prontuarioProcedimentosMedicos.setDataInclusao(new Date());
		}else {
			prontuarioProcedimentosMedicos.setUsuarioAlteracao(getUsuario());
			prontuarioProcedimentosMedicos.setDataAlteracao(new Date());
		}
		
		prontuarioService.inserirAlterarProcedimentosMedicos(prontuarioProcedimentosMedicos);
		listProntuarioProcedimentosMedicos = prontuarioService.findProntuarioProcedimentosMedico(prontuario.getCodigo());
		setCadastroOk(true);
	}
	
	public void  incluirAlteraProcedimentosOutrosProfissionais(){
		prontuarioProcedimentosOutrosProfissionais.setOutrosProfissionais(outrosProfissionais);
		prontuarioProcedimentosOutrosProfissionais.setProntuarioProcedimento(prontuarioProcedimento);

		if(prontuarioProcedimentosOutrosProfissionais.getUsuarioInclusao() == null ) {
			prontuarioProcedimentosOutrosProfissionais.setUsuarioInclusao(getUsuario());
			prontuarioProcedimentosOutrosProfissionais.setDataInclusao(new Date());
		}else {
			prontuarioProcedimentosOutrosProfissionais.setUsuarioAlteracao(getUsuario());
			prontuarioProcedimentosOutrosProfissionais.setDataAlteracao(new Date());
		}

		prontuarioService.inserirAlterarProcedimentosOutrosProfissionais(prontuarioProcedimentosOutrosProfissionais);
		listProntuarioProcedimentosOutrosProfissionais = prontuarioService.findProntuarioProcedimentosOutrosProfissionais(prontuario.getCodigo());
		setCadastroOk(true);
	}
	
	public void  incluirAlteraProcedimentosMedicamentos(){
		prontuarioProcedimentosMedicamento.setMedicamento(medicamento);
		prontuarioProcedimentosMedicamento.setProntuarioProcedimento(prontuarioProcedimento);
		
		if(prontuarioProcedimentosMedicamento.getUsuarioInclusao() == null ) {
			prontuarioProcedimentosMedicamento.setUsuarioInclusao(getUsuario());
			prontuarioProcedimentosMedicamento.setDataInclusao(new Date());
		}else {
			prontuarioProcedimentosMedicamento.setUsuarioAlteracao(getUsuario());
			prontuarioProcedimentosMedicamento.setDataAlteracao(new Date());
		}

		
		prontuarioService.inserirAlterarProcedimentosMedicamentos(prontuarioProcedimentosMedicamento);
		listProntuarioProcedimentosMedicamentos = prontuarioService.findProntuarioProcedimentosMedicamentos(prontuario.getCodigo());
		setCadastroOk(true);
	}
	
	public void  incluirAlteraProcedimentosMateriais(){
		prontuarioProcedimentosMateriais.setMateriais(materiais);
		prontuarioProcedimentosMateriais.setProntuarioProcedimento(prontuarioProcedimento);
		
		if(prontuarioProcedimentosMateriais.getUsuarioInclusao() == null ) {
			prontuarioProcedimentosMateriais.setUsuarioInclusao(getUsuario());
			prontuarioProcedimentosMateriais.setDataInclusao(new Date());
		}else {
			prontuarioProcedimentosMateriais.setUsuarioAlteracao(getUsuario());
			prontuarioProcedimentosMateriais.setDataAlteracao(new Date());
		}
		
		prontuarioService.inserirAlterarProcedimentosMateriais(prontuarioProcedimentosMateriais);
		listProntuarioProcedimentosMateriais = prontuarioService.findProntuarioProcedimentosMateriais(prontuario.getCodigo());
		setCadastroOk(true);
	}
	
	public String getIdProcedimento() {
		return idProcedimento;
	}

	public void setIdProcedimento(String idProcedimento) {
		this.idProcedimento = idProcedimento;
		procedimento = cadastroService.findProcedimentoByCode(Integer.parseInt(idProcedimento.split(" - ")[0]));
	}

	public List<Procedimento> getListProcedimentos() {
		return listProcedimentos;
	}

	public void setListProcedimentos(List<Procedimento> listProcedimentos) {
		this.listProcedimentos = listProcedimentos;
	}

	public Procedimento getProcedimento() {
		return procedimento;
	}

	public void setProcedimento(Procedimento procedimento) {
		this.procedimento = procedimento;
	}

	public ProntuarioProcedimento getProntuarioProcedimento() {
		return prontuarioProcedimento;
	}

	public void setProntuarioProcedimento(
			ProntuarioProcedimento prontuarioProcedimento) {
		this.prontuarioProcedimento = prontuarioProcedimento;
	}

	public List<ProntuarioProcedimento> getListProntuarioProcedimentos() {
		
		return listProntuarioProcedimentos;
	}

	public void setListProntuarioProcedimentos(
			List<ProntuarioProcedimento> listProntuarioProcedimentos) {
		this.listProntuarioProcedimentos = listProntuarioProcedimentos;
	}

	public List<ProntuarioProcedimentosMedico> getListProntuarioProcedimentosMedicos() {
		return listProntuarioProcedimentosMedicos;
	}

	public void setListProntuarioProcedimentosMedicos(
			List<ProntuarioProcedimentosMedico> listProntuarioProcedimentosMedicos) {
		this.listProntuarioProcedimentosMedicos = listProntuarioProcedimentosMedicos;
	}

	public ProntuarioProcedimentosMedico getProntuarioProcedimentosMedicos() {
		return prontuarioProcedimentosMedicos;
	}

	public void setProntuarioProcedimentosMedicos(
			ProntuarioProcedimentosMedico prontuarioProcedimentosMedicos) {
		this.prontuarioProcedimentosMedicos = prontuarioProcedimentosMedicos;
	}

	public Medico getMedicoParticipante() {
		return medicoParticipante;
	}

	public void setMedicoParticipante(Medico medicoParticipante) {
		this.medicoParticipante = medicoParticipante;
	}

	public Integer getIdProntuarioProcedimento() {
		return idProntuarioProcedimento;
	}

	public void setIdProntuarioProcedimento(Integer idProntuarioProcedimento) {
		this.idProntuarioProcedimento = idProntuarioProcedimento;
		prontuarioProcedimento = prontuarioService.findProntuarioProcedimentoByCode(idProntuarioProcedimento);
	}

	public OutrosProfissionai getOutrosProfissionais() {
		return outrosProfissionais;
	}

	public void setOutrosProfissionais(OutrosProfissionai outrosProfissionais) {
		this.outrosProfissionais = outrosProfissionais;
	}

	public String getIdOutrosProfissionais() {
		return idOutrosProfissionais;
	}

	public void setIdOutrosProfissionais(String idOutrosProfissionais) {
		this.idOutrosProfissionais = idOutrosProfissionais;
		outrosProfissionais = cadastroService.findOutrosProfissionaisByCode(Integer.parseInt(idOutrosProfissionais.split(" - ")[0]));
	}

	public List<ProntuarioProcedimentosOutrosProfissionai> getListProntuarioProcedimentosOutrosProfissionais() {
		return listProntuarioProcedimentosOutrosProfissionais;
	}

	public void setListProntuarioProcedimentosOutrosProfissionais(
			List<ProntuarioProcedimentosOutrosProfissionai> listProntuarioProcedimentosOutrosProfissionais) {
		this.listProntuarioProcedimentosOutrosProfissionais = listProntuarioProcedimentosOutrosProfissionais;
	}

	public ProntuarioProcedimentosOutrosProfissionai getProntuarioProcedimentosOutrosProfissionais() {
		return prontuarioProcedimentosOutrosProfissionais;
	}

	public void setProntuarioProcedimentosOutrosProfissionais(
			ProntuarioProcedimentosOutrosProfissionai prontuarioProcedimentosOutrosProfissionais) {
		this.prontuarioProcedimentosOutrosProfissionais = prontuarioProcedimentosOutrosProfissionais;
	}

	public List<OutrosProfissionai> getListOutrosProfissionais() {
		return listOutrosProfissionais;
	}

	public void setListOutrosProfissionais(
			List<OutrosProfissionai> listOutrosProfissionais) {
		this.listOutrosProfissionais = listOutrosProfissionais;
	}

	public Medicamento getMedicamento() {
		return medicamento;
	}

	public void setMedicamento(Medicamento medicamento) {
		this.medicamento = medicamento;
	}

	public ProntuarioProcedimentosMedicamento getProntuarioProcedimentosMedicamento() {
		return prontuarioProcedimentosMedicamento;
	}

	public void setProntuarioProcedimentosMedicamento(
			ProntuarioProcedimentosMedicamento prontuarioProcedimentosMedicamento) {
		this.prontuarioProcedimentosMedicamento = prontuarioProcedimentosMedicamento;
	}

	public List<Medicamento> getListMedicamentos() {
		return listMedicamentos;
	}

	public void setListMedicamentos(List<Medicamento> listMedicamentos) {
		this.listMedicamentos = listMedicamentos;
	}

	public List<ProntuarioProcedimentosMedicamento> getListProntuarioProcedimentosMedicamentos() {
		return listProntuarioProcedimentosMedicamentos;
	}

	public void setListProntuarioProcedimentosMedicamentos(
			List<ProntuarioProcedimentosMedicamento> listProntuarioProcedimentosMedicamentos) {
		this.listProntuarioProcedimentosMedicamentos = listProntuarioProcedimentosMedicamentos;
	}

	public String getIdMedicamento() {
		return idMedicamento;
	}

	public void setIdMedicamento(String idMedicamento) {
		this.idMedicamento = idMedicamento;
		medicamento = cadastroService.findMedicamentoByCode(Integer.parseInt(idMedicamento.split(" - ")[0]));
	}

	public Materiai getMateriais() {
		return materiais;
	}

	public void setMateriais(Materiai materiais) {
		this.materiais = materiais;
	}

	public String getIdMaterial() {
		return idMaterial;
	}

	public void setIdMaterial(String idMaterial) {
		this.idMaterial = idMaterial;
		materiais = cadastroService.findMateriaisByCode(Integer.parseInt(idMaterial.split(" - ")[0]));
	}

	public List<ProntuarioProcedimentosMateriai> getListProntuarioProcedimentosMateriais() {
		return listProntuarioProcedimentosMateriais;
	}

	public void setListProntuarioProcedimentosMateriais(
			List<ProntuarioProcedimentosMateriai> listProntuarioProcedimentosMateriais) {
		this.listProntuarioProcedimentosMateriais = listProntuarioProcedimentosMateriais;
	}

	public List<Materiai> getListMateriais() {
		return listMateriais;
	}

	public void setListMateriais(List<Materiai> listMateriais) {
		this.listMateriais = listMateriais;
	}

	public ProntuarioProcedimentosMateriai getProntuarioProcedimentosMateriais() {
		return prontuarioProcedimentosMateriais;
	}

	public void setProntuarioProcedimentosMateriais(
			ProntuarioProcedimentosMateriai prontuarioProcedimentosMateriais) {
		this.prontuarioProcedimentosMateriais = prontuarioProcedimentosMateriais;
	}

	public boolean isClosePanel() {
		return closePanel;
	}

	public void setClosePanel(boolean closePanel) {
		this.closePanel = closePanel;
		this.closePanel = true;
	}

	public Integer getCodigoConvenioPesquisa() {
		return codigoConvenioPesquisa;
	}

	public void setCodigoConvenioPesquisa(Integer codigoConvenioPesquisa) {
		this.codigoConvenioPesquisa = codigoConvenioPesquisa;
	}

	public String getNomePacientePesquisa() {
		return nomePacientePesquisa;
	}

	public void setNomePacientePesquisa(String nomePacientePesquisa) {
		this.nomePacientePesquisa = nomePacientePesquisa;
	}

	public Date getDataInicioPesquisa() {
		return dataInicioPesquisa;
	}

	public void setDataInicioPesquisa(Date dataInicioPesquisa) {
		this.dataInicioPesquisa = dataInicioPesquisa;
	}

	public Date getDataFimPesquisa() {
		return dataFimPesquisa;
	}

	public void setDataFimPesquisa(Date dataFimPesquisa) {
		this.dataFimPesquisa = dataFimPesquisa;
	}

	public List<Prontuario> getProntuarioPesquisa() {
		return prontuarioPesquisa;
	}

	public void setProntuarioPesquisa(List<Prontuario> prontuarioPesquisa) {
		this.prontuarioPesquisa = prontuarioPesquisa;
	}

	public boolean isEnableTables() {
		return enableTables;
	}

	public void setEnableTables(boolean enableTables) {
		this.enableTables = enableTables;
	}

	public boolean isVisualizacao() {
		return visualizacao;
	}

	public void setVisualizacao(boolean visualizacao) {
		this.visualizacao = visualizacao;
	}

	public Ocorrencia getOcorrencia() {
		return ocorrencia;
	}

	public void setOcorrencia(Ocorrencia ocorrencia) {
		this.ocorrencia = ocorrencia;
	}

	public List<Ocorrencia> getListOcorrencias() {
		return listOcorrencias;
	}

	public void setListOcorrencias(List<Ocorrencia> listOcorrencias) {
		this.listOcorrencias = listOcorrencias;
	}

	public Integer getIdOcorrencia() {
		return idOcorrencia;
	}

	public void setIdOcorrencia(Integer idOcorrencia) {
		this.idOcorrencia = idOcorrencia;
	}	
	
	
}